﻿using Carer.Crm.ViewModel;
using Carer.Data.Enum;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace Carer.Crm.Utility
{
    public static class MenuHelper
    {
        private static IList<MenuModel> _menu = new List<MenuModel>();

        private static void LoadMenuConfig()
        {
            string filePath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Menu.xml");
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filePath);
            //一级菜单
            XmlNodeList nodes = xmlDoc.SelectSingleNode("root").SelectNodes("Menu");

            _menu = GetMenu(nodes);

            Console.Write("");

            //if (nodes != null && nodes.Count > 0)
            //{
            //    foreach (XmlNode nodeOne in nodes)
            //    {
            //        _menu.Add(new MenuModel()
            //        {
            //            Id = nodeOne.SelectSingleNode("Id").InnerText.ToGetValue(0),
            //            Fid = nodeOne.SelectSingleNode("Fid").InnerText.ToGetValue(0),
            //            Level = nodeOne.SelectSingleNode("Fid").InnerText.ToGetValue(0),
            //            Name = nodeOne.SelectSingleNode("Name").InnerText,
            //            Url = nodeOne.SelectSingleNode("Url").InnerText,
            //            CssClass = nodeOne.SelectSingleNode("CssClass").InnerText,
            //            Order = nodeOne.SelectSingleNode("Order").InnerText.ToGetValue(0),
            //            Roles = GetRoles(nodeOne.SelectSingleNode("Roles").InnerText),
            //        });
            //        //二级菜单
            //        XmlNodeList twoNodes = nodeOne.SelectSingleNode("SubMenu").SelectNodes("nodes");
            //        if (twoNodes != null && twoNodes.Count > 0)
            //        {
            //            foreach (XmlNode nodeTwo in twoNodes)
            //            {
            //                _menu.Add(new MenuModel()
            //                {
            //                    Id = nodeTwo.SelectSingleNode("Id").InnerText.ToGetValue(0),
            //                    Fid = nodeTwo.SelectSingleNode("Fid").InnerText.ToGetValue(0),
            //                    Level = nodeTwo.SelectSingleNode("Fid").InnerText.ToGetValue(0),
            //                    Name = nodeTwo.SelectSingleNode("Name").InnerText,
            //                    Url = nodeTwo.SelectSingleNode("Url").InnerText,
            //                    CssClass = nodeTwo.SelectSingleNode("CssClass").InnerText,
            //                    Order = nodeTwo.SelectSingleNode("Order").InnerText.ToGetValue(0),
            //                    Roles = GetRoles(nodeTwo.SelectSingleNode("Roles").InnerText),
            //                });
            //            }
            //        }
            //    }
            //}
        }

        private static List<MenuModel> GetMenu(XmlNodeList nodes)
        {
            List<MenuModel> result = new List<MenuModel>();
            if (nodes != null && nodes.Count > 0)
            {
                foreach (XmlNode node in nodes)
                {
                    result.Add(new MenuModel()
                    {
                        Id = node.SelectSingleNode("Id").InnerText.ToGetValue(0),
                        Fid = node.SelectSingleNode("Fid").InnerText.ToGetValue(0),
                        Level = node.SelectSingleNode("Level").InnerText.ToGetValue(0),
                        Name = node.SelectSingleNode("Name").InnerText,
                        Url = node.SelectSingleNode("Url").InnerText,
                        CssClass = node.SelectSingleNode("CssClass").InnerText,
                        Order = node.SelectSingleNode("Order").InnerText.ToGetValue(0),
                        Roles = GetRoles(node.SelectSingleNode("Roles").InnerText),
                    });

                    //递归      
                    var subMenu = node.SelectSingleNode("SubMenu");
                    if (subMenu != null)
                    {
                        XmlNodeList subNodes = subMenu.SelectNodes("Menu");
                        result.AddRange(GetMenu(subNodes));
                    }

                }
            }

            return result;
        }

        private static List<EnumRole> GetRoles(string val)
        {
            if (!string.IsNullOrWhiteSpace(val))
            {
                List<EnumRole> result = new List<EnumRole>();
                foreach (string item in val.Split(','))
                {
                    int tempVal = item.ToGetValue(-1);
                    result.Add((EnumRole)tempVal);

                }
                return result;
            }

            return null;
        }

        static MenuHelper()
        {
            LoadMenuConfig();

            ////系统管理
            //_menu.Add(new MenuModel()
            //{
            //    Id = 1,
            //    Fid = 0,
            //    Level = 1,
            //    Name = "系统管理",
            //    Url = string.Empty,
            //    CssClass = "fa fa-gear fa-lg",
            //    Order = 1,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 10000,
            //    Fid = 1,
            //    Level = 2,
            //    Name = "单位管理",
            //    Url = "Config/UnitView",
            //    CssClass = "fa fa-edit",
            //    Order = 1,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 10001,
            //    Fid = 1,
            //    Level = 2,
            //    Name = "用户管理",
            //    Url = "Config/UserView",
            //    CssClass = "fa fa-edit",
            //    Order = 2,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager }
            //});


            ////信息维护
            //_menu.Add(new MenuModel()
            //{
            //    Id = 2,
            //    Fid = 0,
            //    Level = 1,
            //    Name = "信息维护",
            //    Url = string.Empty,
            //    CssClass = "fa fa-book fa-lg",
            //    Order = 2,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 20000,
            //    Fid = 2,
            //    Level = 2,
            //    Name = "人员性质",
            //    Url = "Maintain/CrewTypeView",
            //    CssClass = "fa fa-edit",
            //    Order = 1,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 20001,
            //    Fid = 2,
            //    Level = 2,
            //    Name = "服务类别",
            //    Url = "Maintain/CategoryView",
            //    CssClass = "fa fa-edit",
            //    Order = 2,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 20002,
            //    Fid = 2,
            //    Level = 2,
            //    Name = "服务项目",
            //    Url = "Maintain/ServiceView",
            //    CssClass = "fa fa-edit",
            //    Order = 3,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 20003,
            //    Fid = 2,
            //    Level = 2,
            //    Name = "结算标准",
            //    Url = "Maintain/PaymentView",
            //    CssClass = "fa fa-edit",
            //    Order = 4,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 20004,
            //    Fid = 2,
            //    Level = 2,
            //    Name = "人员档案",
            //    Url = "Business/CrewView",
            //    CssClass = "fa fa-edit",
            //    Order = 5,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 20005,
            //    Fid = 2,
            //    Level = 2,
            //    Name = "客户档案",
            //    Url = "Business/CustomerView",
            //    CssClass = "fa fa-edit",
            //    Order = 6,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});


            ////业务管理
            //_menu.Add(new MenuModel()
            //{
            //    Id = 3,
            //    Fid = 0,
            //    Level = 1,
            //    Name = "业务管理",
            //    Url = string.Empty,
            //    CssClass = "fa fa-calendar fa-lg",
            //    Order = 3,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 30000,
            //    Fid = 3,
            //    Level = 2,
            //    Name = "订单管理",
            //    Url = "http://localhost:8001/Business/OrderView",
            //    CssClass = "fa fa-edit",
            //    Order = 1,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 30001,
            //    Fid = 3,
            //    Level = 2,
            //    Name = "排班管理",
            //    Url = "http://localhost:8001/Business/ScheduleView",
            //    CssClass = "fa fa-edit",
            //    Order = 2,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 30002,
            //    Fid = 3,
            //    Level = 2,
            //    Name = "费用管理",
            //    Url = "Business/BonusView",
            //    CssClass = "fa fa-edit",
            //    Order = 3,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 30003,
            //    Fid = 3,
            //    Level = 2,
            //    Name = "工量计算",
            //    Url = "Business/WorkView",
            //    CssClass = "fa fa-edit",
            //    Order = 4,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 30004,
            //    Fid = 3,
            //    Level = 2,
            //    Name = "结算计算",
            //    Url = "Business/PayView",
            //    CssClass = "fa fa-edit",
            //    Order = 5,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 30005,
            //    Fid = 3,
            //    Level = 2,
            //    Name = "收入统计",
            //    Url = "Business/RevenueView",
            //    CssClass = "fa fa-edit",
            //    Order = 6,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
            //_menu.Add(new MenuModel()
            //{
            //    Id = 30006,
            //    Fid = 3,
            //    Level = 2,
            //    Name = "结算统计",
            //    Url = "Business/WageView",
            //    CssClass = "fa fa-edit",
            //    Order = 7,
            //    Roles = new List<EnumRole> { EnumRole.Platform_Manager, EnumRole.Unit_Manager }
            //});
        }
        public static IList<MenuModel> GetMenu(EnumRole role)
        {
            return _menu.Where(it => it.Roles != null && it.Roles.Contains(role)).OrderBy(it => it.Level).ThenBy(it => it.Order).ToList();
        }
    }
}
